//package com.good.shopping.ware.conf;
//
//import com.zaxxer.hikari.HikariDataSource;
//import io.seata.rm.datasource.DataSourceProxy;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.util.StringUtils;
//
//import javax.sql.DataSource;
//
///**
// * seata 分布式事务
// * 使用：
// *  1.每个微服务先必须创建 undo_logo （回滚日志表）
// *  CREATE TABLE `undo_log` (
// *   `id` bigint(20) NOT NULL AUTO_INCREMENT,
// *   `branch_id` bigint(20) NOT NULL,
// *   `xid` varchar(100) NOT NULL,
// *   `context` varchar(128) NOT NULL,
// *   `rollback_info` longblob NOT NULL,
// *   `log_status` int(11) NOT NULL,
// *   `log_created` datetime NOT NULL,
// *   `log_modified` datetime NOT NULL,
// *   PRIMARY KEY (`id`),
// *   UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
// *  ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
// *
// *  2.导入依赖  spring-cloud-starter-alibaba-seata
// *  3.下载事务协调器 seata-all-1.0.0.jar
// * 	    解压并启动seata-server
// *          registry.conf注册中心相关的配置，修改registry文件 type=nacos
// *          file.conf
// *  3、所有想要用到分布式事务的微服务使用seata DatasourceProxy代理自己的数据源
// *  4、每个微服务，都必须导入registry.cof
// * 	      file.conf  vgroup_mapping.{application.name}-fescar-service-group = "default"
// *  5、启动测试
// *  6、给分布式大事务的路口标注@GlobalTransactional
// *  7、每一个远程的小事务用 @Transactional
// * @author shengren.yan
// * @create 2022-03-22
// */
//
//@Configuration
//public class MySeataConfig {
//
//    // 引用数据源
//    @Autowired
//    DataSourceProperties dataSourceProperties;
//
//    // seata代理数据源  ： 因为 Seata 通过代理数据源实现分支事务，如果没有注入，事务无法成功回滚
//    @Bean
//    public DataSource dataSource(DataSourceProperties dataSourceProperties){
//        //得到数据源
//        HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
//        if (StringUtils.hasText(dataSourceProperties.getName())){
//            dataSource.setPoolName(dataSourceProperties.getName());
//        }
//        return new DataSourceProxy(dataSource);
//    }
//
//
////    @Bean
////    @ConfigurationProperties(prefix = "spring.datasource")
////    public DruidDataSource druidDataSource() {
////        return new DruidDataSource();
////    }
////
////    /**
////     * 需要将 DataSourceProxy 设置为主数据源，否则事务无法回滚
////     *
////     * @param druidDataSource The DruidDataSource
////     * @return The default datasource
////     */
////    @Primary
////    @Bean("dataSource")
////    public DataSource dataSource(DruidDataSource druidDataSource) {
////        return new DataSourceProxy(druidDataSource);
////    }
//
//}
